/*
 ============================================================================
 Name        : ejercicio2.c
 Author      : mmino
 Version     :
 Copyright   : Your copyright notice
 Description : Hello World in C, Ansi-style
 ============================================================================
 */

#include <sys/types.h>
#include <wait.h>
#include <unistd.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>

int i=0, j=0;

void terminate(int param) {
	printf("Terminando proceso contador = %d  pid = %d \n",j, getpid());
	exit(0);
}

int main(int argc, char *argv[]) {

	if (argc != 3) {
		puts("Help : ./ejercicio2  {hijos} {segudos} ");
		exit(EXIT_FAILURE);
	}

	void (*prev_fn)(int);
	prev_fn = signal(SIGTERM, terminate);
	int nHijos = atoi(argv[1]);
	int segundos = atoi(argv[2]);
	pid_t pidHijos[nHijos];

	printf("Proceso Padre pid   p = %d ppid  p = %d \n ", getpid(), getppid());

	for (i = 0; i < nHijos; i++) {

		pidHijos[i] = fork();

		if (pidHijos[i] == -1) {

			perror("fork");
			exit(EXIT_FAILURE);

		} else if (pidHijos[i] == 0) {

			printf("\tProceso hijo %d pid = %d, ppid = %d  \n", i, getpid(),getppid());

			for (;; j++) {
				sleep(1); // contador
			}
			exit(0);
			break;

		} else {
			printf("\tEsperando  %d seg. \n", segundos);
			sleep(segundos);
		}

	}

	printf("\tEsperando padre  %d seg. \n", 5);
	sleep(5);

	for (i = 0; i < pidHijos; i++)
		kill(pidHijos[i], SIGTERM);

	printf("Finalizado Padre  pid = %d, ppid = %d  \n", getpid(), getppid());

	exit(EXIT_SUCCESS);

}
